#pragma once


namespace tmms
{
    namespace base
    {
        class NonCopyable
        {
        protected:
            NonCopyable()
            {}
            ~NonCopyable()
            {}

            // 禁止复制构造函数
            NonCopyable(const NonCopyable&) = delete;
            // 禁止复制赋值运算符
            NonCopyable& operator=(const NonCopyable&) = delete;

//移动构造函数和移动赋值运算符的实现通常会进行资源管理，以防止资源泄漏，
//但在 NonCopyable 类的上下文中，我们没有实际的资源需要管理，因此这里的实现是非常简单的。
//如果将来在 NonCopyable 类中增加了资源（如指针），
//需要在移动构造函数和移动赋值运算符中处理这些资源的移动或释放。
            // 移动构造函数
            NonCopyable(NonCopyable&&) noexcept
            {}

            // 移动赋值运算符
            NonCopyable& operator=(NonCopyable&&) noexcept
            {
                return *this; // 这里只是返回当前对象，因为没有成员需要移动
            }
        };
    }
}